package com.ruoyi.common.utils;

import org.springframework.lang.Nullable;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Objects;

/**
 * BigDecimalUtils
 */
public class BigDecimalUtils {
    /**
     * 为空时返回0
     * @param bigDecimal
     * @return
     */
    public static BigDecimal safeBigDecimal(@Nullable BigDecimal bigDecimal) {
        return Objects.isNull(bigDecimal) ? BigDecimal.ZERO : bigDecimal;
    }

    /**
     * 可空排序
     * @param a
     * @param b
     * @return
     */
    public static int nullCompare(@Nullable BigDecimal a, @Nullable BigDecimal b) {
        return Objects.isNull(a) ? Objects.isNull(b) ? -1 : 1 : Objects.isNull(b) ? -1 : 0;
    }

    /**
     * 除数/被除数为空或0, 返回null
     * @param a
     * @param b
     * @return
     */
    public static BigDecimal safeDivide(@Nullable BigDecimal a, @Nullable BigDecimal b) {
        return Objects.nonNull(a) && Objects.nonNull(b) && BigDecimal.ZERO.compareTo(b) != 0
                ? a.divide(b, RoundingMode.HALF_UP) : null;
    }


    /**
     * 百分比 被除数为0, 返回1
     * @param a
     * @param b
     * @return
     */
    public static BigDecimal percent(@Nullable BigDecimal a, @Nullable BigDecimal b) {
        return Objects.nonNull(a) && Objects.nonNull(b) ? BigDecimal.ZERO.compareTo(b) == 0
                ? BigDecimal.ONE : a.divide(b, RoundingMode.HALF_UP) : null;
    }
}
